package com.revelvy.controller;

import com.revelvy.mapper.PowerMapper;
import com.revelvy.pojo.Rights;
import com.revelvy.pojo.Roles;
import com.revelvy.utils.JsonWapper;
import com.revelvy.utils.Meta;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Objects;

/**
 * Author: Revelvy
 */
@Controller
public class PowerController {

    @Autowired
    private PowerMapper powerMapper;

    /**
     * 查询全部权限
     *
     * @param type 权限展示形式
     * @return 权限集合
     */
    @ResponseBody
    @GetMapping("/rights/{type}")
    public JsonWapper<ArrayList<Rights>, Meta> queryRights(@PathVariable("type") String type) {
        JsonWapper<ArrayList<Rights>, Meta> jsonWapper = new JsonWapper<>();
        Meta meta = new Meta();
        type = type.trim();
        if (type.isEmpty()) {
            meta.setMsg("查询参数格式错误");
            meta.setStatus(200);
            jsonWapper.setData(null);
        }
        if (Objects.equals(type, "list")) {
            ArrayList<Rights> rights = powerMapper.queryAllRights(type);
            meta.setMsg("获取权限列表成功");
            meta.setStatus(200);
            jsonWapper.setData(rights);
        } else if (Objects.equals(type, "tree")) {
            meta.setMsg("树状显示权限，还没弄");
            meta.setStatus(200);
            jsonWapper.setData(null);
        } else {
            meta.setMsg("查询参数格式错误");
            meta.setStatus(200);
            jsonWapper.setData(null);
        }
        jsonWapper.setMeta(meta);
        return jsonWapper;
    }

    /**
     * 查询全部角色
     *
     * @return jsonWapper { data 数据 {roles 角色集合} meta 操作信息}
     */
    @ResponseBody
    @GetMapping("/roles")
    public JsonWapper<ArrayList<Roles>, Meta> queryAllRoles() {
        JsonWapper<ArrayList<Roles>, Meta> jsonWapper = new JsonWapper<>();
        Meta meta = new Meta();
        ArrayList<Roles> roles = powerMapper.queryAllRoles();
        if (roles.size() == 0) {
            jsonWapper.setData(null);
            meta.setMsg("获取角色列表失败");
            meta.setStatus(500);
        }
        jsonWapper.setData(roles);
        meta.setMsg("获取角色列表成功");
        meta.setStatus(200);
        jsonWapper.setMeta(meta);
        return jsonWapper;
    }

    /**
     * 添加角色
     *
     * @param roles 角色{roleName 角色名 roleDesc 角色描述}
     * @return jsonWapper { data 数据 {roles 角色} meta 操作信息}
     */
    @ResponseBody
    @PostMapping("/roles")
    public JsonWapper<Roles, Meta> addRoles(@Validated @RequestBody Roles roles) {
        JsonWapper<Roles, Meta> jsonWapper = new JsonWapper<>();
        Meta meta = new Meta();
        Integer result = powerMapper.addRole(roles);
        if (result != 1) {
            meta.setMsg("添加角色失败");
            meta.setStatus(500);
        } else {
            meta.setMsg("添加角色成功");
            meta.setStatus(201);
        }
        jsonWapper.setData(roles);
        jsonWapper.setMeta(meta);
        return jsonWapper;
    }

    /**
     * 根据id查询角色
     *
     * @param roleId 角色id
     * @return jsonWapper { data 数据 {roles 角色} meta 操作信息}
     */
    @ResponseBody
    @GetMapping("/roles/{id}")
    public JsonWapper<Roles, Meta> queryUsersById(@PathVariable("id") Integer roleId) {
        JsonWapper<Roles, Meta> jsonWapper = new JsonWapper<>();
        Meta meta = new Meta();
        Roles roles = powerMapper.queryRoleById(roleId);
        if (roles == null) {
            meta.setMsg("角色查询失败");
            meta.setStatus(500);
        } else {
            meta.setMsg("角色查询成功");
            meta.setStatus(200);
        }
        jsonWapper.setData(roles);
        jsonWapper.setMeta(meta);
        return jsonWapper;
    }

    /**
     * 更新角色信息
     *
     * @param roleId 角色id
     * @param roles  {roleName 角色名 roleDesc 角色描述}
     * @return jsonWapper { data 数据 {roles 角色} meta 操作信息}
     */
    @ResponseBody
    @PutMapping("/roles/{id}")
    public JsonWapper<Roles, Meta> updateRoleById(@Validated @PathVariable("id") Integer roleId, @Validated @RequestBody Roles roles) {
        JsonWapper<Roles, Meta> jsonWapper = new JsonWapper<>();
        Meta meta = new Meta();
        HashMap<String, Object> hashMap = new HashMap<>();
        hashMap.put("roleId", roleId);
        hashMap.put("roleName", roles.getRoleName());
        hashMap.put("roleDesc", roles.getRoleDesc());
        Integer result = powerMapper.updateRoleById(hashMap);
        if (result != 1) {
            meta.setMsg("角色更新失败");
            meta.setStatus(500);
        } else {
            meta.setMsg("角色更新成功");
            meta.setStatus(200);
        }
        jsonWapper.setData(roles);
        jsonWapper.setMeta(meta);
        return jsonWapper;
    }

    /**
     *根据id删除角色
     * @param roleId 角色id
     * @return jsonWapper { data 数据 {null} meta 操作信息}
     */
    @ResponseBody
    @DeleteMapping("/roles/{id}")
    public JsonWapper<Roles, Meta> deleteRoleById(@Validated @PathVariable("id") Integer roleId) {
        JsonWapper<Roles, Meta> jsonWapper = new JsonWapper<>();
        Meta meta = new Meta();
        Integer result = powerMapper.deleteRoleById(roleId);
        if (result != 1) {
            meta.setMsg("角色删除失败");
            meta.setStatus(500);
        } else {
            meta.setMsg("角色删除成功");
            meta.setStatus(200);
        }
        jsonWapper.setData(null);
        jsonWapper.setMeta(meta);
        return jsonWapper;
    }
}
